package com.weixin.api;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import com.weixin.api.request.WxKfRequest;
import com.weixin.config.WxConfig;
import com.weixin.core.TokenFactory;
import com.weixin.core.WxActuator;
import com.weixin.interfaces.WeixinCallback;
import com.weixin.utils.WxJson;
import com.weixin.utils.WxMd5;

/**
 * 类描述：微信客服消息api<br>
 * 创建人：邓强   <br>
 * 创建时间：2017年10月30日 上午11:15:38    <br> 
 * 修改人：  <br>
 * 修改时间：2017年10月30日 上午11:15:38   <br>  
 * 修改备注：     <br>
 * @version   V1.0
 */
public class WxKf {
	
	/**
	 * 添加客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:58:43    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:58:43   <br>  
	 * 修改备注：     <br> 
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String addKf(String kfacc, String nickName, String pwd){
		return manageKf("add", kfacc, nickName, pwd);
	}
	
	/**
	 * 添加客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:58:50    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:58:50   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String addKf(WxConfig wxConfig,String kfacc, String nickName, String pwd){
		return manageKf(wxConfig, "add", kfacc, nickName, pwd);
	}
	
	/**
	 * 修改客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:58:58    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:58:58   <br>  
	 * 修改备注：     <br> 
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String updateKf(String kfacc, String nickName, String pwd){
		return manageKf("update", kfacc, nickName, pwd);
	}
	
	/**
	 * 修改客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:59:07    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:59:07   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String updateKf(WxConfig wxConfig,String kfacc, String nickName, String pwd){
		return manageKf(wxConfig, "update", kfacc, nickName, pwd);
	}
	
	/**
	 * 删除客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:59:14    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:59:14   <br>  
	 * 修改备注：     <br> 
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String delKf(String kfacc, String nickName, String pwd){
		return manageKf("del", kfacc, nickName, pwd);
	}
	
	/**
	 * 删除客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:59:22    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:59:22   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 * @return
	 */
	public static String delKf(WxConfig wxConfig,String kfacc, String nickName, String pwd){
		return manageKf(wxConfig, "del", kfacc, nickName, pwd);
	}
	
	/**
	 * 获取客服列表<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:59:29    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:59:29   <br>  
	 * 修改备注：     <br> 
	 * @return
	 */
	public static String getkflist(){
		WxConfig wxConfig = TokenFactory.getDefaultWxConfigs();
		return getKflist(wxConfig);
		
	}
	
	/**
	 * 获取客服列表<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 下午3:59:36    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 下午3:59:36   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @return
	 */
	public static String getKflist(WxConfig wxConfig){
		String resStr = WxActuator.execute(wxConfig, new WeixinCallback() {
			@Override
			public String callback(WxConfig wxConfig) {
				return WxKfRequest.manageKf(wxConfig, "getkflist", null);
			}
		});

		return resStr;
	}
	
	
	/**
	 * 编辑客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 上午11:15:52    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 上午11:15:52   <br>  
	 * 修改备注：     <br> 
	 * @param type
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 */
	private static String manageKf(String type, String kfacc, String nickName, String pwd){
		WxConfig wxConfig = TokenFactory.getDefaultWxConfigs();
		return manageKf(wxConfig, type, kfacc, nickName, pwd);
	}

	/**
	 * 编辑客服信息<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 上午11:16:33    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 上午11:16:33   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @param type
	 * @param kfacc
	 * @param nickName
	 * @param pwd
	 */
	private static String manageKf(WxConfig wxConfig,final String type, String kfacc, String nickName, String pwd){
		Map<String, String> kfMap=new HashMap<String, String>();
		kfMap.put("kf_account", kfacc);
		kfMap.put("nickname", nickName);
		kfMap.put("password", WxMd5.MD5Encode(pwd));
		
		final String body=WxJson.toJson(kfMap);
		
		String resStr = WxActuator.execute(wxConfig, new WeixinCallback() {
			@Override
			public String callback(WxConfig wxConfig) {
				return WxKfRequest.manageKf(wxConfig, type, body);
			}
		});

		return resStr;
	}
	
	/**
	 * 上传客服头像<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 上午11:19:18    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 上午11:19:18   <br>  
	 * 修改备注：     <br> 
	 * @param kfacc
	 * @param file
	 */
	public static String uploadheadimg(String kfacc, File file){
		WxConfig wxConfig = TokenFactory.getDefaultWxConfigs();
		return uploadheadimg(wxConfig, kfacc, file);
	}
	
	/**
	 * 上传客服头像<br>
	 * <br>  
	 * 创建人：邓强   <br>
	 * 创建时间：2017年10月30日 上午11:19:32    <br> 
	 * 修改人：  <br>
	 * 修改时间：2017年10月30日 上午11:19:32   <br>  
	 * 修改备注：     <br> 
	 * @param wxConfig
	 * @param kfacc
	 * @param file
	 */
	public static String uploadheadimg(WxConfig wxConfig, String kfacc, File file){
		return WxKfRequest.uploadheadimg(wxConfig, kfacc, file);
	}
}